package br.com.mynage.service.impl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import br.com.mynage.controller.Mensagens;
import br.com.mynage.dao.IUsuarioDAO;
import br.com.mynage.dao.impl.GenericDaoImpl;
import br.com.mynage.dao.impl.UsuarioDaoImpl;
import br.com.mynage.dominio.Projeto;
import br.com.mynage.dominio.Usuario;
import br.com.mynage.exception.DaoException;
import br.com.mynage.service.IServiceUsuario;


public class ServiceUsuarioImpl extends GenericDaoImpl<Usuario> implements IServiceUsuario {

	private List<Usuario> usuarios;
	IUsuarioDAO dao;
	
	public ServiceUsuarioImpl() {
		usuarios =  new ArrayList<Usuario>();
		dao = new UsuarioDaoImpl();
		
	}
	
	@Override
	public String cadastrar(Usuario usuario) {
		//usuarios.add(usuario);
		try {
			dao = new UsuarioDaoImpl();
			dao.insert(usuario);
		}
		catch (DaoException e)  {
			e.printStackTrace();
		}
		finally {
			
		}
		return Mensagens.CADASTRO_SUCESSO;
	}

	@Override
	public String editar(Usuario usuario) {
		usuarios = null;
		dao = new UsuarioDaoImpl();
		try {
			dao.update(usuario);
		} catch (DaoException e) {
			e.printStackTrace();
		}
		
		return Mensagens.OPERACAO_SUCESSO;
	}

	@Override
	public String remover(Usuario usuario) {
		usuarios.remove(usuario);
		return Mensagens.OPERACAO_SUCESSO;
	}
	
	public String cadastrar(int idUsuario) {
		return Mensagens.CADASTRO_SUCESSO;
	}

	public String editar(int idUsuario) {
		return null;
		
	}

	public String remover(int idUsuario) {
		Iterator<Usuario> it = usuarios.iterator();
		
		while (it.hasNext()) {
			Usuario u = it.next();
			if (u.getId() == idUsuario) {
				try {
					usuarios.remove(u);
					dao = new UsuarioDaoImpl();
					dao.remove(u);
				break;
				}
				catch (DaoException e) {
					// TODO: handle exception
				}
				finally {
					if (dao != null)
						System.out.println("aki");
				}
			}
				
		}
		
		return Mensagens.CADASTRO_SUCESSO;
	}

	public List<Usuario> getUsuarios(Projeto projeto) {
		
		if (usuarios == null || usuarios.isEmpty()) {
			
			try {
				dao = new UsuarioDaoImpl();
				usuarios  = dao.findUsuariosByProjeto(projeto);
			}
			catch (DaoException e) {
				e.printStackTrace();
			}
		}
		return usuarios;
		
	}
	
	public List<Usuario> getUsuarios() {
		
		if (usuarios == null || usuarios.isEmpty()) {
			
			try {
				dao = new UsuarioDaoImpl();
				usuarios  = dao.findAll();
			}
			catch (DaoException e) {
				e.printStackTrace();
			}
		}
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	
	public Usuario getUsuario(int idUsuario) {
		Usuario user = new Usuario();
		for (Usuario u:usuarios) {
			if (u.getId() == idUsuario) {
				user = u;
				break;
			}
		}
		
		return user;
	}


	@Override
	public Usuario buscarUsuario(String login, String senha) throws DaoException {
		return dao.buscarUsuario(login, senha);
	}

	@Override
	public Class<Usuario> getClassType() {
		return Usuario.class;
	}
	

}
